<!-- yangbuyi Copyright (c) https://yby6.com 2023. -->

<template>
  <u-transition
    :show="show"
    custom-class="u-overlay"
    :duration="duration"
    :custom-style="overlayStyle"
    @click="clickHandler"
  >
    <slot />
  </u-transition>
</template>

<script>
import props from "./props.js";

/**
 * overlay 遮罩
 * @description 创建一个遮罩层，用于强调特定的页面元素，并阻止用户对遮罩下层的内容进行操作，一般用于弹窗场景
 * @tutorial https://www.uviewui.com/components/overlay.html
 * @property {Boolean}			show		是否显示遮罩（默认 false ）
 * @property {String | Number}	zIndex		zIndex 层级（默认 10070 ）
 * @property {String | Number}	duration	动画时长，单位毫秒（默认 300 ）
 * @property {String | Number}	opacity		不透明度值，当做rgba的第四个参数 （默认 0.5 ）
 * @property {Object}			customStyle	定义需要用到的外部样式
 * @event {Function} click 点击遮罩发送事件
 * @example <u-overlay :show="show" @click="show = false"></u-overlay>
 */
export default {
  name: "u-overlay",
  mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
  computed: {
    overlayStyle() {
      const style = {
        position: "fixed",
        top: 0,
        left: 0,
        right: 0,
        zIndex: this.zIndex,
        bottom: 0,
        "background-color": `rgba(0, 0, 0, ${this.opacity})`,
      };
      return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
    },
  },
  methods: {
    clickHandler() {
      this.$emit("click");
    },
  },
};
</script>

<style lang="scss" scoped>
@import "../../libs/css/components.scss";
$u-overlay-top: 0 !default;
$u-overlay-left: 0 !default;
$u-overlay-width: 100% !default;
$u-overlay-height: 100% !default;
$u-overlay-background-color: rgba(0, 0, 0, 0.7) !default;
.u-overlay {
  position: fixed;
  top: $u-overlay-top;
  left: $u-overlay-left;
  width: $u-overlay-width;
  height: $u-overlay-height;
  background-color: $u-overlay-background-color;
}
</style>
